#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
#include <errno.h>
#include <time.h>
#include <sys/mman.h>

#define BLACK 0x00000000  // 黑色
#define RED 0x00ff0000    // 红色
#define GREEN 0x0000ff00  // 绿色
#define YELLOW 0x00ffff00 // 黄色
#define BLUE 0x000000ff   // 蓝色
#define PURPLE 0x00ff00ff // 紫色
#define CYAN 0x0000ffff   // 青色
#define WHITE 0x00ffffff  // 白色
#define GRAY 0x00808080   // 灰色
#define PINK 0x00ff8080   // 粉色
#define ORANGE 0x00ff8000 // 橙色

int main()
{
    int fd;
    fd = open("/dev/fb0", O_RDWR);
    if (fd < 0)
    {
        printf("open /dev/fb0 failed error: %s\n", strerror(errno));
        return -1;
    }

    printf("open /dev/fb0 success\n");

    int(*lcd_mmap) = mmap(NULL, 800 * 480 * 4, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);

    // for (int i = 0; i < 480; i++)
    // {
    //     for (int j = 0; j < 800; j++)
    //     {
    //         if (i > 120 && i < 360 && j > 200 && j < 600)
    //             buf[i][j] = RED;
    //         else
    //             buf[i][j] = BLACK;
    //     }
    // }

    for (int i = 0; i < 480; i++)
    {
        for (int j = 0; j < 800; j++)
        {
            if (i > 120 && i < 360 && j > 200 && j < 600)
                lcd_mmap[i * 800 + j] = RED;
            else
                lcd_mmap[i * 800 + j] = BLACK;
        }
    }

    munmap(lcd_mmap, 800 * 480 * 4);
    close(fd);
}